package com.bugstack.springframework.beans.factory.config;


import com.bugstack.springframework.beans.PropertyValue;
import com.bugstack.springframework.beans.PropertyValues;

/**
 *  这个 BeanDefinition 类用于描述一个 Bean 的定义，包括 Bean 的类型和其属性值。通过构造方法，可以创建包含指定属性值的 Bean 定义，
 *  或者使用默认的空属性值。这种设计通常用于 IoC 容器，以便在运行时动态地实例化和配置 Bean。
 */
public class BeanDefinition {

    private Class beanClass;//对比step01：为了把 Bean 的实例化操作放到容器中处理，将bean的属性修改为Class
    private PropertyValues propertyValues;//用来存储bean的属性值，PropertyValues 是一个类，用于封装一组属性值。这些属性值可以在 Bean 实例化时注入


    /**单参数构造方法
     * propertyValues: 被初始化为一个新的 PropertyValues 对象。如果只提供了 beanClass 参数，
     * propertyValues 将是一个空的 PropertyValues 实例，表示该 Bean 没有属性值需要注入。
     * @param beanClass
     */
    public BeanDefinition(Class beanClass) {
        this.beanClass = beanClass;
        this.propertyValues = new PropertyValues();
    }

    /**双参数构造方法
     *参数 propertyValues: 用于初始化 propertyValues 属性。如果传入的 propertyValues 为 null，
     * 则初始化为一个新的 PropertyValues 对象。这确保了 propertyValues 永远不会为 null，避免了空指针异常。
     * @param beanClass
     * @param propertyValues
     */
    public BeanDefinition(Class beanClass,PropertyValues propertyValues){
        this.beanClass = beanClass;
        this.propertyValues = propertyValues !=null? propertyValues:new PropertyValues();
    }

    public Class getBeanClass() {
        return beanClass;
    }

    public PropertyValues getPropertyValues() {
        return propertyValues;
    }

    public void setBeanClass(Class beanClass) {
        this.beanClass = beanClass;
    }

    public void setPropertyValues(PropertyValues propertyValues) {
        this.propertyValues = propertyValues;
    }
}
